{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from keras.layers import Dense, Input\n",
    "from keras.models import Model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "encoding_dim = 32\n",
    "\n",
    "input_img = Input(shape = (784, ))\n",
    "\n",
    "encoded = Dense(encoding_dim, activation = 'relu')(input_img)\n",
    "\n",
    "decoded = Dense(784, activation = 'sigmoid')(encoded)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "autoencoder = Model(input_img, decoded)\n",
    "\n",
    "encoder = Model(input_img, encoded)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "encoded_input = Input(shape = (encoding_dim, ))\n",
    "\n",
    "decoder_layer = autoencoder.layers[-1]\n",
    "\n",
    "decoder = Model(encoded_input, decoder_layer(encoded_input))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "autoencoder.compile(optimizer = 'adadelta', loss = 'binary_crossentropy')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "from keras.datasets import mnist\n",
    "import numpy as np\n",
    "(x_train, _), (x_test, _) = mnist.load_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0]],\n",
       "\n",
       "       [[0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0]],\n",
       "\n",
       "       [[0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0]],\n",
       "\n",
       "       ...,\n",
       "\n",
       "       [[0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0]],\n",
       "\n",
       "       [[0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0]],\n",
       "\n",
       "       [[0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        ...,\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0],\n",
       "        [0, 0, 0, ..., 0, 0, 0]]], dtype=uint8)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = x_train.astype('float32')/255.\n",
    "x_test = x_test.astype('float32')/255."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "x_train = x_train.reshape(len(x_train), np.prod(x_train.shape[1:]))\n",
    "x_test = x_test.reshape(len(x_test), np.prod(x_test.shape[1:]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(60000, 784)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(10000, 784)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 60000 samples, validate on 10000 samples\n",
      "Epoch 1/50\n",
      "60000/60000 [==============================] - 16s 266us/step - loss: 0.3626 - val_loss: 0.2716\n",
      "Epoch 2/50\n",
      "60000/60000 [==============================] - 15s 258us/step - loss: 0.2646 - val_loss: 0.2540\n",
      "Epoch 3/50\n",
      "60000/60000 [==============================] - 16s 259us/step - loss: 0.2440 - val_loss: 0.2317\n",
      "Epoch 4/50\n",
      "60000/60000 [==============================] - 17s 283us/step - loss: 0.2235 - val_loss: 0.2131\n",
      "Epoch 5/50\n",
      "60000/60000 [==============================] - 15s 253us/step - loss: 0.2074 - val_loss: 0.1994\n",
      "Epoch 6/50\n",
      "60000/60000 [==============================] - 16s 263us/step - loss: 0.1960 - val_loss: 0.1897\n",
      "Epoch 7/50\n",
      "60000/60000 [==============================] - 16s 266us/step - loss: 0.1873 - val_loss: 0.1819\n",
      "Epoch 8/50\n",
      "60000/60000 [==============================] - 16s 259us/step - loss: 0.1801 - val_loss: 0.1753\n",
      "Epoch 9/50\n",
      "60000/60000 [==============================] - 15s 257us/step - loss: 0.1740 - val_loss: 0.1696\n",
      "Epoch 10/50\n",
      "60000/60000 [==============================] - 16s 260us/step - loss: 0.1686 - val_loss: 0.1647\n",
      "Epoch 11/50\n",
      "60000/60000 [==============================] - 15s 251us/step - loss: 0.1638 - val_loss: 0.1599\n",
      "Epoch 12/50\n",
      "60000/60000 [==============================] - 15s 251us/step - loss: 0.1594 - val_loss: 0.1559\n",
      "Epoch 13/50\n",
      "60000/60000 [==============================] - 15s 253us/step - loss: 0.1554 - val_loss: 0.1519\n",
      "Epoch 14/50\n",
      "60000/60000 [==============================] - 15s 249us/step - loss: 0.1518 - val_loss: 0.1484\n",
      "Epoch 15/50\n",
      "60000/60000 [==============================] - 16s 274us/step - loss: 0.1484 - val_loss: 0.1453\n",
      "Epoch 16/50\n",
      "60000/60000 [==============================] - 17s 282us/step - loss: 0.1454 - val_loss: 0.1423\n",
      "Epoch 17/50\n",
      "60000/60000 [==============================] - 16s 264us/step - loss: 0.1426 - val_loss: 0.1397\n",
      "Epoch 18/50\n",
      "60000/60000 [==============================] - 16s 275us/step - loss: 0.1400 - val_loss: 0.1372\n",
      "Epoch 19/50\n",
      "60000/60000 [==============================] - 16s 263us/step - loss: 0.1376 - val_loss: 0.1349\n",
      "Epoch 20/50\n",
      "60000/60000 [==============================] - 17s 279us/step - loss: 0.1352 - val_loss: 0.1325\n",
      "Epoch 21/50\n",
      "60000/60000 [==============================] - 16s 270us/step - loss: 0.1330 - val_loss: 0.1304\n",
      "Epoch 22/50\n",
      "60000/60000 [==============================] - 16s 260us/step - loss: 0.1309 - val_loss: 0.1283\n",
      "Epoch 23/50\n",
      "60000/60000 [==============================] - 16s 273us/step - loss: 0.1289 - val_loss: 0.1263\n",
      "Epoch 24/50\n",
      "60000/60000 [==============================] - 17s 278us/step - loss: 0.1269 - val_loss: 0.1244\n",
      "Epoch 25/50\n",
      "60000/60000 [==============================] - 15s 247us/step - loss: 0.1250 - val_loss: 0.1226\n",
      "Epoch 26/50\n",
      "60000/60000 [==============================] - 16s 265us/step - loss: 0.1232 - val_loss: 0.1208\n",
      "Epoch 27/50\n",
      "60000/60000 [==============================] - 18s 297us/step - loss: 0.1215 - val_loss: 0.1192\n",
      "Epoch 28/50\n",
      "60000/60000 [==============================] - 16s 263us/step - loss: 0.1199 - val_loss: 0.1176\n",
      "Epoch 29/50\n",
      "60000/60000 [==============================] - 15s 250us/step - loss: 0.1184 - val_loss: 0.1161\n",
      "Epoch 30/50\n",
      "60000/60000 [==============================] - 17s 281us/step - loss: 0.1170 - val_loss: 0.1148\n",
      "Epoch 31/50\n",
      "60000/60000 [==============================] - 17s 276us/step - loss: 0.1157 - val_loss: 0.1134\n",
      "Epoch 32/50\n",
      "60000/60000 [==============================] - 18s 301us/step - loss: 0.1144 - val_loss: 0.1122\n",
      "Epoch 33/50\n",
      "60000/60000 [==============================] - 15s 248us/step - loss: 0.1132 - val_loss: 0.1111\n",
      "Epoch 34/50\n",
      "60000/60000 [==============================] - 16s 261us/step - loss: 0.1121 - val_loss: 0.1100\n",
      "Epoch 35/50\n",
      "60000/60000 [==============================] - 15s 249us/step - loss: 0.1111 - val_loss: 0.1090\n",
      "Epoch 36/50\n",
      "60000/60000 [==============================] - 15s 251us/step - loss: 0.1102 - val_loss: 0.1081\n",
      "Epoch 37/50\n",
      "60000/60000 [==============================] - 16s 272us/step - loss: 0.1093 - val_loss: 0.1073\n",
      "Epoch 38/50\n",
      "60000/60000 [==============================] - 17s 290us/step - loss: 0.1085 - val_loss: 0.1065\n",
      "Epoch 39/50\n",
      "60000/60000 [==============================] - 17s 287us/step - loss: 0.1077 - val_loss: 0.1057\n",
      "Epoch 40/50\n",
      "60000/60000 [==============================] - 16s 258us/step - loss: 0.1070 - val_loss: 0.1050\n",
      "Epoch 41/50\n",
      "60000/60000 [==============================] - 15s 245us/step - loss: 0.1063 - val_loss: 0.1043\n",
      "Epoch 42/50\n",
      "60000/60000 [==============================] - 15s 247us/step - loss: 0.1057 - val_loss: 0.1038\n",
      "Epoch 43/50\n",
      "60000/60000 [==============================] - 15s 256us/step - loss: 0.1051 - val_loss: 0.1032\n",
      "Epoch 44/50\n",
      "60000/60000 [==============================] - 15s 256us/step - loss: 0.1045 - val_loss: 0.1026\n",
      "Epoch 45/50\n",
      "60000/60000 [==============================] - 16s 274us/step - loss: 0.1040 - val_loss: 0.1021\n",
      "Epoch 46/50\n",
      "60000/60000 [==============================] - 17s 280us/step - loss: 0.1035 - val_loss: 0.1017\n",
      "Epoch 47/50\n",
      "60000/60000 [==============================] - 17s 281us/step - loss: 0.1031 - val_loss: 0.1012\n",
      "Epoch 48/50\n",
      "60000/60000 [==============================] - 15s 256us/step - loss: 0.1026 - val_loss: 0.1008\n",
      "Epoch 49/50\n",
      "60000/60000 [==============================] - 15s 250us/step - loss: 0.1023 - val_loss: 0.1005\n",
      "Epoch 50/50\n",
      "60000/60000 [==============================] - 15s 250us/step - loss: 0.1019 - val_loss: 0.1001\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<keras.callbacks.History at 0xb381e8a90>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "autoencoder.fit(x_train, x_train,\n",
    "               epochs = 50,\n",
    "               batch_size = 256,\n",
    "               shuffle = True,\n",
    "               validation_data = (x_test, x_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "encoded_imgs = encoder.predict(x_test)\n",
    "decoded_imgs = decoder.predict(encoded_imgs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABIEAAAD4CAYAAAB7VPbbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAIABJREFUeJzt3Xm4FMXV+PFTMaAiirKIyA7iioqAKCqKikvcF4yoMcQ9bzRq4kaiMW4x708T3BIX8qoYNQTjblRcEHdRMQqCCAKyCbKIokRx7d8fXstTxe2m79xZuqu/n+fx4fTtvjN153T19Ix1qkwURQIAAAAAAICw/aDWDQAAAAAAAEDl8SUQAAAAAABAAfAlEAAAAAAAQAHwJRAAAAAAAEAB8CUQAAAAAABAAfAlEAAAAAAAQAHwJRAAAAAAAEABNOpLIGPMvsaYacaYGcaYYeVqFKqLPOYfOQwDecw/chgG8ph/5DAM5DH/yGEYyGNYTBRFpf2iMWuIyHQR2UtE5ovIqyJyVBRFb5Wveag08ph/5DAM5DH/yGEYyGP+kcMwkMf8I4dhII/hacxIoH4iMiOKollRFH0hIv8UkYPL0yxUEXnMP3IYBvKYf+QwDOQx/8hhGMhj/pHDMJDHwPywEb/bXkTmqe35IrJD0i8YY0obdoRGi6LIxOxqUB7JYU0tjaKoTT0/py/mCH0xCPTFANAXg0BfDAB9MQj0xQDQF4MQ1xcdjfkSqL6TZJWEG2NOFpGTG/E8qKzV5pEcZsacmJ/TF8NAX8wP+mLY6Iv5QV8MG30xP+iLYaMv5kdcX3Q05kug+SLSUW13EJEF/kFRFI0QkREifCuYUavNIznMPPpiGOiL+UdfDAN9Mf/oi2GgL+YffTEM9MXANGZOoFdFpIcxpqsxpqmIDBGRB8vTLFQRecw/chgG8ph/5DAM5DH/yGEYyGP+kcMwkMfAlDwSKIqir4wxp4nIYyKyhojcEkXRlLK1DFVBHvOPHIaBPOYfOQwDecw/chgG8ph/5DAM5DE8JS8RX9KTMTSsZhIm+moQclhTr0VR1LccD0Qea4e+GAT6YgDoi0GgLwaAvhgE+mIA6ItBSNUXG1MOBgAAAAAAgJzgSyAAAAAAAIAC4EsgAAAAAACAAmjMEvFAzZx99tk2XnvttZ1922yzjY0HDx4c+xg33HCDjV966SVn3+23397YJgIAAAAAkCmMBAIAAAAAACgAvgQCAAAAAAAoAL4EAgAAAAAAKADmBEJujB492sZJc/1o33zzTey+U045xcaDBg1y9j3zzDM2njt3btomosY23XRTZ/vtt9+28RlnnGHj6667rmptKrJ11lnHxldeeaWNdd8TEXnttddsfMQRRzj75syZU6HWAQAA1MYGG2xg406dOqX6Hf+e6Fe/+pWNJ0+ebOPp06c7x02cOLGUJiJgjAQCAAAAAAAoAL4EAgAAAAAAKADKwZBZuvxLJH0JmC4Beuyxx2zcrVs357gDDzzQxt27d3f2HXPMMTb+4x//mOp5UXvbbbeds63LAefPn1/t5hReu3btbHzSSSfZ2C/T7NOnj40POOAAZ99f//rXCrUOWu/evW187733Ovu6dOlSsefde++9ne2pU6faeN68eRV7Xqyefo8UEXnwwQdtfNppp9n4xhtvdI77+uuvK9uwAG244YY2vuuuu2z84osvOseNGDHCxrNnz654u77TokULZ3vXXXe18ZgxY2z85ZdfVq1NQB7sv//+Nj7ooIOcfQMHDrTxJptskurx/DKvzp0723jNNdeM/b011lgj1eOjOBgJBAAAAAAAUAB8CQQAAAAAAFAAlIMhU/r27WvjQw89NPa4KVOm2NgfXrl06VIbr1ixwsZNmzZ1jhs/fryNt912W2dfq1atUrYYWdKrVy9n+7///a+N77vvvmo3p3DatGnjbN922201agkaap999rFx0pDycvNLjo4//ngbDxkypGrtwLf0e9/1118fe9xf/vIXG99yyy3Ovs8++6z8DQuMXhVIxL2n0aVXixYtco6rVQmYXsFRxL3W63LeGTNmVL5hObPeeus523qKgZ49e9rYX6WW0rps09NInHrqqTbWpe8iImuvvbaNjTGNfl5/FVygVIwEAgAAAAAAKAC+BAIAAAAAACgAvgQCAAAAAAAogFzPCeQvGa7rMBcsWODsW7lypY3vvPNOG7///vvOcdQz15ZeUtqvndU183r+ioULF6Z67LPOOsvZ3nLLLWOPffjhh1M9JmpP19TrZYtFRG6//fZqN6dwTj/9dBsfcsghzr5+/fo1+PH00sMiIj/4wff/r2LixIk2fvbZZxv82HD98Iff3wLst99+NWmDP9fIr3/9axuvs846zj49xxcqQ/e/Dh06xB43atQoG+v7K8Rr3bq1jUePHu3sa9mypY31XEy//OUvK9+wGBdccIGNu3bt6uw75ZRTbMx986qOOeYYG//hD39w9nXs2LHe3/HnDvrggw/K3zCUjb4+nnHGGRV9rrffftvG+rMQymeTTTaxsb5Wi7hz1A4cONDZ980339j4xhtvtPELL7zgHJfF6yQjgQAAAAAAAAqAL4EAAAAAAAAKINflYFdccYWz3aVLl1S/p4exfvLJJ86+ag6zmz9/vo39v2XChAlVa0eWPPTQQzbWQ/NE3FwtW7aswY/tLzfcpEmTBj8GsmfzzTe3sV8+4g+5R/ldddVVNtbDYkt12GGHxW7PmTPHxkceeaRznF9WhNXbfffdbdy/f38b++9HleQvla3LdJs1a+bsoxys/NZcc01n+/zzz0/1e7rUNoqisrYpVL1797axX1KgXXLJJVVozaq22morZ1uX0N93333OPt5bV6XLg66++mobt2rVyjkurr9cd911zrYuby/lnhfp+KU/urRLl/SMGTPGOe7zzz+38fLly23sv0/p+9LHH3/c2Td58mQbv/zyyzZ+/fXXneM+++yz2MdHenr6CBG3j+l7Tf+cSGuHHXaw8VdffeXsmzZtmo2ff/55Z58+57744ouSnrsUjAQCAAAAAAAoAL4EAgAAAAAAKAC+BAIAAAAAACiAXM8JpJeEFxHZZpttbDx16lRn3xZbbGHjpLrsHXfc0cbz5s2zcdySjvXRdYBLliyxsV7+3Dd37lxnu6hzAml6/o9SnXPOOTbedNNNY4/Ttbj1bSO7zj33XBv75wz9qDIeeeQRG+sl3Eull8JdsWKFs69z58421ssUv/LKK85xa6yxRqPbETq/Hl4v8z1z5kwbX3755VVr08EHH1y158Kqtt56a2e7T58+scfqe5tHH320Ym0KxYYbbuhsH3744bHHnnDCCTbW942VpucBevLJJ2OP8+cE8ufThMjZZ59t45YtWzb49/157vbdd18b+8vM6/mDqjmHSCiS5unZdtttbayXBveNHz/exvpz5ezZs53jOnXqZGM9F6xIeeZRxKr09wGnnnqqjf0+tt5669X7+++9956z/dxzz9n43XffdfbpzyB6bsp+/fo5x+lrwn777efsmzhxoo31MvOVttq7d2PMLcaYxcaYyepnLY0xTxhj3qn7d4Okx0Dtkccg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gQAAAAAAAAqAL4EAAAAAAAAKgHKwMth5552dbX8W+u/omepFRCZPnlyxNoXunnvusXGrVq1ij7vjjjtsXLRVgUIyaNAgG7ds2dLZN2bMGBvrVTdQPv7KhpoealtpusTBb1NSGy+66CIbH3vssWVvV5b4K9a0b9/exqNGjap2c6zu3bvX+3PeB6svqeykHCtT4Vuvvfaas73NNtvYuFevXs6+fffd18Z61ZslS5Y4x912222pnluvNjNx4sTY41588UUbc4/UMP71VJfu6ZJLv+REr3B66KGH2thfTUj3RX/fSSedZGOd67feeitV24vAL/3RdH/7/e9/7+x74IEHbMyKiNnx1FNPOdu6dFx/RhAR6dSpk42vvfZaGyeVxuryMr/0LElcCdg333zjbN933302Pv300519CxcuTP185cRIIAAAAAAAgALgSyAAAAAAAIAC4EsgAAAAAACAAmBOoDLYb7/9nO0mTZrYeOzYsTZ+6aWXqtamEOl66969e8ce9/TTT9vYr/VFPm277bY29mt677777mo3pxB+/vOf29ivba6VAw880Mbbbbeds0+30W+vnhModJ988omzrec00HOSiLjzay1btqys7dhwww2d7bj5GZ5//vmyPi/qt8suu9j46KOPjj1u+fLlNmbp5PL68MMPbazns/C3zzvvvEY/V7du3Wys51ITca8JZ599dqOfq6iefPJJZ1v3HT3vjz9PT9y8JP7jnXrqqTb+97//7ezr0aOHjfX8Ivp9u+jatGljY/+eQM+dd+GFFzr7LrjgAhvfeOONNh4/frxznJ53ZsaMGTaeMmVKbJu22morZ1t/LuR6m8xftl3Pp7X++us7+/TcvHre3g8++MA5bu7cuTbW54T+zCEi0q9fvwa3d8SIEc72b3/7Wxvr+b5qiZFAAAAAAAAABcCXQAAAAAAAAAVAOViJ1l57bRvrpQZFRL744gsb63KkL7/8svINC4i/9LseSqdL7nx6qPOKFSvK3zBUxUYbbWTjAQMG2HjatGnOcXrZRZSPLr2qJj2EW0Rkyy23tLG+BiTxl1Uu0rXXHzKtl30+/PDDnX0PP/ywjYcPH97g5+rZs6ezrUtQunTp4uyLK4HISqlh6PT76Q9+EP///5544olqNAcVpktc/L6ny838ayXS80tof/zjH9tYl6m3aNEi9jGuu+46G/tlgCtX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DtsePHiwjf1lXfXynkceeaSz7/rrr7exvtY2Yuh0VfpiUr/S+3Tsl0TutddeNvb7jn4v1GUJevnhpOf1l7HVr6dfxqJ/r1+/fjb231t1fvQwepH4spNGLFufu76Y9nqaROft8MMPd/bpckL/dR0/fryN9bW2xiUINX9f1Pei+r7RL2ds1aqVjf2yTf166vugJEnX3qSc6HadeuqpNtb9UkTkqaeesvHjjz/u7NPTKiT1xQbcF9W0L8aVTSW9z+vyZBGRnj172li/JkuWLHGOe/jhh208fPhwG/uv/89//nMb77bbbs4+/Zlm1KhRsc+V9vXX7S31vJIM9MU4uu+JiPzud7+zsX9/c+WVV9o4qdROv066RMi/DpeyrLf/Ouv3U//xy10mXeu+qOm/zT8v9WfqCy64wNmnS8CaNWtmY3/6Fn0v+uKLL9r49ddfd47Tnxf9+yPdF3U7/NIzfc33yzv1e4j+DsS/jyp36XWpxWVtoyhaKCJS9++Gqzke2UQe848choE85h85DAN5zD9yGAbymH/kMAzkMUAVnxjaGHOyiJxc6edB5ZDDMJDH/COHYSCP+UcOw0Ae848choE85h85zJdSvwRaZIxpF0XRQmNMOxFZHHdgFEUjRGSEiIgxJnYcoR7e5s/KrYfF6XItf9jjypUrbZw05E7v84/Tz6WHnj355JOxj+EP29PDxvTKRVtvvbVznC5F0+Vl9T1m3M8budJNqjymzWEpkl7/tMNY/WHVejieno3dP68uvPBCG/slKHHnTznKwZKU8Bhl74vlkDSEs5Qc637fv39/Z58e2q5XOBJxh/Kmfa4arUBU877o0+WT5557rrPPLzn6zueff+5sX3vttTa++eabbeyXv+rhr/7rr1dK3H777W3sl4PpNu23337OvnvuucfGn376qY3LvFJY2fuiPmf9a5IukdR9TK86KSKy884729gvodbvmXfffXe9P/efO2kFMD102e9vugTpwAMPtLG/Gqgerj158mRnX9Ljl1Hm+mJc6Z9I+pJa/Xt6+Loup/WP88+DK664wsZpV62qkZq9L+rzfKuttnL26fcx/31Rr2irywiSyir1c/nXB32/o1fcExG57LLLbKzLJvS9q4jI2LFjbezfo8bdA5e5X5a1LyaVbJfS7vbt28c+vi5/vvjii53j7r33Xhvr99k+ffo4x3Xs2NHG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\n",
      "text/plain": [
       "<Figure size 1440x288 with 20 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "n = 10\n",
    "plt.figure(figsize = (20, 4))\n",
    "for i in range(n):\n",
    "    ax = plt.subplot(2, n, i+1)\n",
    "    plt.imshow(x_test[i].reshape(28, 28))\n",
    "    plt.gray()\n",
    "    \n",
    "    ax = plt.subplot(2, n, i+1 + n)\n",
    "    plt.imshow(decoded_imgs[i].reshape(28, 28))\n",
    "    plt.gray()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
